package com.ruoyi.system.dto;

import lombok.Data;

import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.util.List;

/**
 * 需求变更申请创建DTO
 * 
 * @author ruoyi
 * @since 2024-01-01
 */
@Data
public class DemandChangeRequestCreateDTO {

    /**
     * 项目ID
     */
    @NotNull(message = "项目ID不能为空")
    private Long projectId;

    /**
     * 变更类型
     * 1-设计方案变更，2-材料物料变更，3-合同变更，4-施工项变更，5-工期变更，6-其他变更
     */
    @NotBlank(message = "变更类型不能为空")
    private String changeType;

    /**
     * 变更内容描述（富文本）
     */
    @NotBlank(message = "变更内容描述不能为空")
    private String changeContent;

    /**
     * 变更原因
     */
    @NotBlank(message = "变更原因不能为空")
    private String changeReason;

    /**
     * 变更影响范围
     */
    private ImpactScopeDTO impactScope;

    /**
     * 附件列表
     */
    private List<String> attachments;

    /**
     * 紧急程度
     * 1-普通，2-紧急，3-特急
     */
    @NotBlank(message = "紧急程度不能为空")
    private String urgencyLevel;

    /**
     * 紧急理由
     */
    private String urgencyReason;

    /**
     * 项目信息（由前端传递，不需要后端查询）
     */
    private ProjectInfoDTO projectInfo;

    /**
     * 设计师信息（由前端传递，不需要后端查询）
     */
    private DesignerInfoDTO designerInfo;

    /**
     * 变更影响范围DTO
     */
    @Data
    public static class ImpactScopeDTO {
        /**
         * 是否影响工期
         */
        private Boolean affectSchedule;

        /**
         * 预计增减天数
         */
        private String scheduleChange;

        /**
         * 是否影响成本
         */
        private Boolean affectCost;

        /**
         * 预计增减金额
         */
        private String costChange;

        /**
         * 其他影响
         */
        private String otherImpact;
    }

    /**
     * 项目信息DTO
     */
    @Data
    public static class ProjectInfoDTO {
        /**
         * 项目编号
         */
        private String projectCode;

        /**
         * 项目名称
         */
        private String projectName;

        /**
         * 客户名称
         */
        private String customerName;

        /**
         * 当前阶段
         */
        private String currentStage;

        /**
         * 设计项目编号
         */
        private String designProjectCode;

        /**
         * 施工项目编号
         */
        private String constructionProjectCode;
    }

    /**
     * 设计师信息DTO
     */
    @Data
    public static class DesignerInfoDTO {
        /**
         * 设计师ID
         */
        private Long designerId;

        /**
         * 设计师姓名
         */
        private String designerName;
    }
}
